iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
AI & Data

從資料庫到資料分析視覺化系列 第 20

{DAY 20} Pandas 學習筆記part.6

  • 分享至 

  • xImage
  •  

前言

這篇文章會進行到更多的資料操作

將會處理 Indexing Values

在標籤值的處理很重要

因為標籤值最主要就是拿來判讀各個欄位的名稱

很多時候外部讀取進來的欄位名稱都會是使用縮寫或是代號

再進行資料的分析前必須要先把欄位的名稱改成後續方便使用的形式

這個也是相當關鍵的資料分析前置作業

處理 Indexing Values

index可以自動產生

例如創造一個series,pandas會自動加上從0開始的索引值

也可以自己指定

像是前面有練習過的用dictionary產生一個dataframe,或是利用csv檔去讀取資料然後指定參數

還有另外一個指定index的方法,是用set_index()

這會指定資料裡某一欄的資料變成index

covid_india = pd.read_csv("Latest Covid-19 India Status.csv", index_col=0)
covid_india.head()

現在若是想要將index設為Active Ratio (%),同時保留State/UTs的欄位資料

# 可以先將indexed data設為另外一組column
covid_india["State/UTs"] = covid_india.index
# 接著將index改成Active Ratio (%)
covid_india = covid_india.set_index("Active Ratio (%)")
covid_india.head()

可以看到State/UTs的欄位資料放到了最右邊,而index順利改成Active Ratio (%)

也可以使用.reset_index()

這會刪除掉原先設定好的index,並且將原本index的數值放到另外一列column

covid_india = covid_india.reset_index()
covid_india.head()

可以看到Active Ratio (%)往右邊移動,而index則是自動產生從零開始的default value

現在換一個資料檔案試試看

使用的是kaggle上美國的police shooting資料檔案

US Police Shootings

police_shooting = pd.read_csv("shootings.csv", index_col=0)
police_shooting.head()

當我們想要試著看manner_of_death類別裡有多少種時

會使用到.unique()

police_shooting["manner_of_death"].unique()
'''
array(['shot', 'shot and Tasered'], dtype=object)
'''

可以發現只有兩個值'shot' & 'shot and Tasered'

若是只想要找出shot的資料

police_shooting = police_shooting[police_shooting["manner_of_death"] == "shot"]
police_shooting.head()

當我們想要的欄位只有特定幾個,可以使用list來留存

columns_to_keep = ["name","date","manner_of_death","armed","age","gender","race","city","state"]
police_shooting = police_shooting[columns_to_keep]
police_shooting.head()

若是我們想要讓index變成state和city的結合,可以利用list設定index

police_shooting = police_shooting.set_index(["state",'city'])
police_shooting.head(10)

現在若是想要將name的first name和 last name拆成兩個column

可以使用.apply()

將arbitrary function放進去並且應用在Series or Dataframe裡面的rows或是columns

先建立一個function

再apply到police_shooting的資料裡

def splitname(row):
    row["First"] = row["name"].split(" ")[0]
    row["Last"] = row["name"].split(" ")[-1]
    return row

police_shooting = police_shooting.apply(splitname, axis="columns")
police_shooting.head()

可以看到順利的新增了First&Last的兩個欄位


上一篇
{DAY 19} Pandas 學習筆記part.5
下一篇
{DAY 21} Pandas 學習筆記part.7
系列文
從資料庫到資料分析視覺化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言